package kr.pe.johnkim.app.mobile.rest.dao;

import kr.pe.johnkim.app.domain.MyHistoryCategory;
import kr.pe.johnkim.app.domain.MyHistoryItem;

import java.util.List;

/**
 * My History 카테고리 관련 기능들을 정의하는 인터페이스이다.
 *
 * Service 의 역할을 하는 Dao 이기 때문에 등록이나 수정의 경우 성공/실패 유무를
 * Service 가 아닌 Dao 에서 직접 확인 해서 반환 한다.
 *
 * @author : johnkim <cale9797@gmail.com / Simple.ly Inc,>
 * @Date : 11. 12. 26
 */


public interface MyHistoryCategoryDao {
    /**
     * 카테고리 중복을 확인 한다.
     *
     * @param myHistoryCategory
     * @return MyHistoryCategory
     */
    public MyHistoryCategory checkDuplication(MyHistoryCategory myHistoryCategory);

    /**
     * 카테고리를 등록 한다.
     *
     * @param myHistoryCategory
     * @return True or False
     */
    public boolean registerCategory(MyHistoryCategory myHistoryCategory);

    /**
     * 카테고리 목록을 가져 온다.
     * 
     * @param myHistoryCategory
     * @return List<MyHistoryCategory>
     */
    public List<MyHistoryCategory> selectCategoryList(MyHistoryCategory myHistoryCategory);

    /**
     * 카테고리 전체 갯수를 가져 온다.
     * 
     * @param myHistoryCategory
     * @return MyHistoryCategory
     */
    public MyHistoryCategory selectCategoryCount(MyHistoryCategory myHistoryCategory);

    /**
     * 카테고리 상세 정보를 가져 온다.
     * 
     * @param myHistoryCategory
     * @return MyHistoryCategory
     */
    public MyHistoryCategory selectCategory(MyHistoryCategory myHistoryCategory);

    /**
     * 카테고리 내용을 수정 한다.
     *
     * @param myHistoryCategory
     * @return True or False
     */
    public boolean updateCategory(MyHistoryCategory myHistoryCategory);

    /**
     * 카테고리를 비 활성화 한다.
     *
     * @param myHistoryCategory
     * @return True or False
     */
    public boolean updateDeactivateCategory(MyHistoryCategory myHistoryCategory);

    /**
     * 카테고리를 즐겨 찾기에서 등록 한다.
     * 
     * @param myHistoryCategory
     * @return True or False
     */
    public boolean updateFavoriteCategory(MyHistoryCategory myHistoryCategory);

    /**
     * 카테고리를 즐겨 찾기에서 등록 해제 한다.
     *
     * @param myHistoryCategory
     * @return True or False
     */
    public boolean updateDeactivateFavoriteCategory(MyHistoryCategory myHistoryCategory);

    /**
     * Category Analysis 화면에서 출력할 item 목록을 가져 온다.
     * 
     * @param myHistoryItem
     * @return List<MyHistoryItem>
     */
    public List<MyHistoryItem> selectItemListForCategoryAnalysis(MyHistoryItem myHistoryItem);

    /**
     * Group 의 Category 목록을 가져 온다.
     *
     * 비활성의 목적으로 사용 한다.
     *
     * @param myHistoryCategory
     * @return
     */
    public List<MyHistoryCategory> selectCategoryListForGroup(MyHistoryCategory myHistoryCategory);

    /**
     * Drink Category 목록을 등록 한다.
     * 
     * @param myHistoryCategory
     */
    public void registerCategoryList(MyHistoryCategory myHistoryCategory);

    /**
     * Item 목록을 등록 하기 위해서 미리 등록된 Category 목록을 가져 온다.
     *
     * @param myHistoryCategory
     * @return
     */
    public List<MyHistoryCategory> selectCategoryListForRegisterItemList(MyHistoryCategory myHistoryCategory);
}
